import GrayRelease from '../models/grayRelease.model.js';


class GrayReleaseController {
  static async getAllGrayReleases(req, res) {
    try {
      const releases = await GrayRelease.getAll();
      res.status(200).json(releases);
    } catch (error) {
      res.status(500).json({ message: '获取灰度发布配置列表失败', error: error.message });
    }
  }

  static async getGrayReleaseById(req, res) {
    try {
      const { id } = req.params;
      const release = await GrayRelease.getById(id);
      if (!release) {
        return res.status(404).json({ message: '灰度发布配置不存在' });
      }
      res.status(200).json(release);
    } catch (error) {
      res.status(500).json({ message: '获取灰度发布配置详情失败', error: error.message });
    }
  }

  static async getGrayReleasesByComponentVersionId(req, res) {
    try {
      const { componentVersionId } = req.params;
      // 检查组件版本是否存在
      const version = await ComponentVersion.getById(componentVersionId);
      if (!version) {
        return res.status(404).json({ message: '组件版本不存在' });
      }
      
      const releases = await GrayRelease.getByComponentVersionId(componentVersionId);
      res.status(200).json(releases);
    } catch (error) {
      res.status(500).json({ message: '获取灰度发布配置列表失败', error: error.message });
    }
  }

  static async getActiveGrayReleases(req, res) {
    try {
      const releases = await GrayRelease.getActiveReleases();
      res.status(200).json(releases);
    } catch (error) {
      res.status(500).json({ message: '获取激活的灰度发布配置失败', error: error.message });
    }
  }

  static async createGrayRelease(req, res) {
    try {
      const { componentVersionId, threshold, percentage = 100.00, status = 'pending' } = req.body;
      
      // 验证必要参数
      if (!componentVersionId || !threshold) {
        return res.status(400).json({ message: '组件版本ID和阈值不能为空' });
      }
      
      // 检查组件版本是否存在
      const version = await ComponentVersion.getById(componentVersionId);
      if (!version) {
        return res.status(404).json({ message: '组件版本不存在' });
      }
      
      // 创建灰度发布配置
      const releaseId = await GrayRelease.create(componentVersionId, threshold, percentage, status);
      const newRelease = await GrayRelease.getById(releaseId);
      res.status(201).json(newRelease);
    } catch (error) {
      res.status(500).json({ message: '创建灰度发布配置失败', error: error.message });
    }
  }

  static async updateGrayRelease(req, res) {
    try {
      const { id } = req.params;
      const updateData = req.body;
      
      // 检查灰度发布配置是否存在
      const release = await GrayRelease.getById(id);
      if (!release) {
        return res.status(404).json({ message: '灰度发布配置不存在' });
      }
      
      // 如果更新了组件版本ID，检查新的组件版本是否存在
      if (updateData.componentVersionId && updateData.componentVersionId !== release.componentVersionId) {
        const version = await ComponentVersion.getById(updateData.componentVersionId);
        if (!version) {
          return res.status(404).json({ message: '指定的组件版本不存在' });
        }
      }
      
      const updatedRelease = await GrayRelease.update(id, updateData);
      res.status(200).json(updatedRelease);
    } catch (error) {
      res.status(500).json({ message: '更新灰度发布配置失败', error: error.message });
    }
  }

  static async activateGrayRelease(req, res) {
    try {
      const { id } = req.params;
      
      // 检查灰度发布配置是否存在
      const release = await GrayRelease.getById(id);
      if (!release) {
        return res.status(404).json({ message: '灰度发布配置不存在' });
      }
      
      const updatedRelease = await GrayRelease.activate(id);
      res.status(200).json(updatedRelease);
    } catch (error) {
      res.status(500).json({ message: '激活灰度发布配置失败', error: error.message });
    }
  }

  static async completeGrayRelease(req, res) {
    try {
      const { id } = req.params;
      
      // 检查灰度发布配置是否存在
      const release = await GrayRelease.getById(id);
      if (!release) {
        return res.status(404).json({ message: '灰度发布配置不存在' });
      }
      
      const updatedRelease = await GrayRelease.complete(id);
      res.status(200).json(updatedRelease);
    } catch (error) {
      res.status(500).json({ message: '完成灰度发布配置失败', error: error.message });
    }
  }

  static async pauseGrayRelease(req, res) {
    try {
      const { id } = req.params;
      
      // 检查灰度发布配置是否存在
      const release = await GrayRelease.getById(id);
      if (!release) {
        return res.status(404).json({ message: '灰度发布配置不存在' });
      }
      
      const updatedRelease = await GrayRelease.pause(id);
      res.status(200).json(updatedRelease);
    } catch (error) {
      res.status(500).json({ message: '暂停灰度发布配置失败', error: error.message });
    }
  }

  static async deleteGrayRelease(req, res) {
    try {
      const { id } = req.params;
      
      // 检查灰度发布配置是否存在
      const release = await GrayRelease.getById(id);
      if (!release) {
        return res.status(404).json({ message: '灰度发布配置不存在' });
      }
      
      await GrayRelease.delete(id);
      res.status(204).send();
    } catch (error) {
      res.status(500).json({ message: '删除灰度发布配置失败', error: error.message });
    }
  }
}

export default GrayReleaseController;
